/* 
 * IMU_WT931.c - The C source file of the IMU(WT931) driver
 * NOTE: This file is based on C98 standard
 *
 * Copyright (c) 2020-, FOSH Project
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author            Notes           mail
 * 2020-03-29     周森       first version   
 * 2021-03-17     江榕煜     add annotation     2373180028@qq.com
 * 							 并重构命名和逻辑优化
**/
#include "IMU_WT931.h"

/**
  * @brief  判断imu数据是否健康 
  * @note	数据和校验
  * @param      
  * 		data(uint8_t *)	数据指针
  * @retval
  * 		uint8_t		结果：正确1，错误0
  */
static uint8_t WT931_verify(uint8_t *data)
{
	int16_t sum=0;
	uint8_t i;
	for(i=0;i<=9;i++)	// 数据和
	{
		sum+=data[i];
	}
	if(data[10]==(uint8_t)sum)	// 校验
	{
		return 1;
	}
	else return 0;	
}

/**
 * @brief   WT931原数据解析
 * @note    该函数是IMU原数据转用户格式的转码接口
 * @param
 *          imu_info_t(WT931_9AxisData *)	解析出的数据存放目标对象
* 			srcData(uint8_t *)				原数据
 * @retval
 *          None
**/
void WT931_9AxisDataAnalys(WT931_9AxisData *imu_info_t,
						uint8_t * srcData)
{
	if(srcData[0]!=0x55)	// 帧头判断
	{
		return;
	}
	else{ 
        if(WT931_verify(srcData))	// 数据和校验
        {
            switch(srcData[1])	// 数据类型判断
            {
                case 0x50:	// 时间
                    memcpy(&(imu_info_t->Time),&srcData[2],8);
                    break;
                case 0x51:	// 加速度
                    memcpy(&(imu_info_t->Accelerate),&srcData[2],8);
                    break;
                case 0x52:	// 陀螺仪
                    memcpy(&(imu_info_t->Gyro),&srcData[2],8);
                    break;
                case 0x53:	// 角度
                    memcpy(&(imu_info_t->Angle),&srcData[2],8);
                    break;
                case 0x54:  // 四元数
                    break;
            }
        }
    }
	
	return;
}

